using Bogus;
using TestBuildingBlocks;

// @formatter:wrap_chained_method_calls chop_if_long
// @formatter:wrap_before_first_method_call true

namespace JsonApiDotNetCoreTests.IntegrationTests.NamingConventions;

internal sealed class NamingFakers
{
    private readonly Lazy<Faker<SwimmingPool>> _lazySwimmingPoolFaker = new(() => new Faker<SwimmingPool>()
        .MakeDeterministic()
        .RuleFor(swimmingPool => swimmingPool.IsIndoor, faker => faker.Random.Bool()));

    private readonly Lazy<Faker<WaterSlide>> _lazyWaterSlideFaker = new(() => new Faker<WaterSlide>()
        .MakeDeterministic()
        .RuleFor(waterSlide => waterSlide.LengthInMeters, faker => faker.Random.Decimal(3, 100)));

    private readonly Lazy<Faker<DivingBoard>> _lazyDivingBoardFaker = new(() => new Faker<DivingBoard>()
        .MakeDeterministic()
        .RuleFor(divingBoard => divingBoard.HeightInMeters, faker => faker.Random.Decimal(1, 15)));

    public Faker<SwimmingPool> SwimmingPool => _lazySwimmingPoolFaker.Value;
    public Faker<WaterSlide> WaterSlide => _lazyWaterSlideFaker.Value;
    public Faker<DivingBoard> DivingBoard => _lazyDivingBoardFaker.Value;
}
